﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using csharp.rad.general;
using ComponentFactory.Krypton.Toolkit;

namespace csharp.rad.GOVhotel
{
    public partial class ScalaBase : KryptonForm
    {
        Database myDBase;
        int códCame, ultSeque, qIdx, opçTipo;
        DateTime[,] refData = new DateTime[3, 2];

        public ScalaBase(Database myDBase)
        {
            InitializeComponent();
            this.myDBase = myDBase;
        }

        private void Form_Load(object sender, EventArgs e)
        {
            Escala regEscala = new Escala(myDBase);
            int dbRet = regEscala.Última();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: ScalaBaseLoadÚlt" + "\n" + regEscala.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            ultSeque = regEscala.Seque;
            int wDay = (int)regEscala.Época.DayOfWeek;
            if (wDay == 0) wDay = 7;
            wDay = wDay - 1;
            wDay = -wDay;
            baseAlterada.Value = regEscala.Época.AddDays(wDay);
            baseAlterada.MinDate = baseAlterada.Value;
            baseAlterada.MaxDate = baseAlterada.MinDate.AddDays(6);
            Cameiras rolCame = new Cameiras(myDBase);
            dbRet = rolCame.ListaATIVA();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: ScalaBaseLoad" + "\n" + rolCame.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            for (int xx = 0; xx < rolCame.Items.Count; xx++)
            {
                int figura = 0;
                if (rolCame.Items[xx].Tipo == "F") figura = 1;
                string nome = rolCame.Items[xx].Nome.Replace('_', ' ');
                string flag = "";
                regEscala.Seque = ultSeque;
                regEscala.Cameira = rolCame.Items[xx].Código;
                dbRet = regEscala.Obter();
                if (dbRet > 1)
                {
                    MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                        + "referência: ScalaBaseObterFolga" + "\n" + regEscala.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (dbRet == 0)
                {
                    flag = "(" + regEscala.Data.ToString("ddd")
                        + "-" + regEscala.Horário.ToString() + ")";
                    if (regEscala.Bloco != 0)
                        flag = "(BL." + regEscala.Bloco.ToString() + ") (" + regEscala.Data.ToString("ddd")
                            + "-" + regEscala.Horário.ToString() + ")";
                }
                else flag = "";
                vewCameira.Items.Add(rolCame.Items[xx].Código.ToString(), nome, figura);
                qIdx = vewCameira.Items.Count - 1;
                vewCameira.Items[qIdx].ToolTipText = flag;
                DateTime dataHoje = DateTime.Today;
                dataAltIni.MinDate = dataHoje.AddMonths(-6);
                dataAltIni.MaxDate = dataHoje.AddMonths(6);
                dataAltIni.Value = dataHoje;
                dataAltFim.MinDate = dataHoje.AddMonths(-6);
                dataAltFim.MaxDate = dataHoje.AddMonths(6);
                dataAltFim.Value = dataHoje;
            }
        }

        private void cmdGravar_Click(object sender, EventArgs e)
        {
            if ((int)janAlter.Tag != 0)
            {
                if (dataAltFim.Value < dataAltIni.Value)
                {
                    MessageBox.Show("data Final\nnão pode ser menor que\ndata Inicial",
                        "   Favor Corrigir");
                    return;
                }
                for (int ix = 0; ix < 3; ix++)
                {
                    if (opçTipo != (ix + 1))
                    {
                        if ((dataAltIni.Value <= refData[ix,1]) && (dataAltFim.Value >= refData[ix,0]))
                        {
                            string [] tabLanço = new string [] {"Férias", "Afastamento", "Atestado"};
                            MessageBox.Show("O período assinalado para " + tabLanço[opçTipo-1]
                                + "\ncoincide em parte com " + tabLanço[ix] + "\n(de " + refData[ix,0].ToString("dd/MM/yyyy")
                                + " até " + refData[ix,1].ToString("dd/MM/yyyy") + ")", "   Favor Corrigir");
                            return;
                        }
                    }
                }
            }
            myDBase.BeginTransaction(IsolationLevel.ReadCommitted);
            Escala regEscala = new Escala(myDBase);
            regEscala.Seque = ultSeque;
            regEscala.Cameira = códCame;
            regEscala.Data = baseAlterada.Value;
            regEscala.Bloco = (int)BlocoAlter.Value;
            regEscala.Horário = HoraAlter.Value.ToString("00") + MinoAlter.Value.ToString(":00");
            string [] tabTítulo = new string [] {"x", "N", "C", "P", "Z"};
            regEscala .Título = tabTítulo[Convert.ToInt32(janTítulo.Tag)];
            regEscala.Ordem = (int)OrdemAlter.Value;
            int dbRet = regEscala.SetBase();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: ScalaBaseSetBase" + "\n" + regEscala.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                myDBase.RollBackTransaction();
                return;
            }
            if ((int)janAlter.Tag != 0) 
            {
                Cameira regCame = new Cameira(myDBase);
                regCame.Código = códCame;
                regCame.FérInício = dataAltIni.Value;
                regCame.FérFinal = dataAltFim.Value;
                dbRet = regCame.SetBase(opçTipo);
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                        + "referência: ScalaBaseSetCame" + "\n" + regCame.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    myDBase.RollBackTransaction();
                    return;
                }
            }
            myDBase.CommitTransaction();
            string nome = vewCameira.Items[qIdx].Text;
            vewCameira.Items[qIdx].Text = BlocoAlter.Value.ToString() + " - " + nome;
            janBase.Enabled = false;
            //cmdGravar.Visible = false; 
            infoOK.Visible = true;
            Pulso.Enabled = true;
        }

        private void cmdVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void vewCameira_Click(object sender, EventArgs e)
        {
            qIdx = vewCameira.SelectedIndices[0];
            códCame = Convert.ToInt32(vewCameira.Items[qIdx].Name);
            txNome.Text = vewCameira.Items[qIdx].Text;  
            Escala regEscala = new Escala(myDBase);
            regEscala.Seque = ultSeque;
            regEscala.Cameira = códCame;
            int dbRet = regEscala.Obter();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: ScalaBaseObterFolga" + "\n" + regEscala.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            basePrevista.Value = regEscala.Data;
            int wDays = (int)regEscala.Data.DayOfWeek;
            if (wDays > 0) wDays = 7 - wDays;
            string nome = vewCameira.Items[qIdx].Text;
            BlocoPrev.Value = regEscala.Bloco;
            BlocoAlter.Value = regEscala.Bloco;
            BlocoAlter.Enabled = true;
            string qHora = regEscala.Horário.Substring (0,2);
            string qMino = regEscala.Horário.Substring(3, 2);
            HoraPrev.Value = Convert.ToInt32(qHora);
            HoraAlter.Value = HoraPrev.Value;
            MinoPrev.Value = Convert.ToInt32(qMino);
            MinoAlter.Value = MinoPrev.Value;
            if (regEscala.Ordem >= 50) regEscala.Ordem = regEscala.Ordem - 50;
            OrdemPrev.Value = regEscala.Ordem;
            OrdemAlter.Value = regEscala.Ordem;
            if (regEscala.Título == "N")
            {
                titAtual.Text = "(- - -)";
                titAtual.Tag = 1;
                janTítulo.Tag = 1;
                opçTitlo1.Checked = true; 
            }
            else if (regEscala.Título == "C")
            {
                titAtual.Text  = "(Líder)";
                titAtual.Tag = 2;
                janTítulo.Tag = 2;
                opçTitlo2.Checked = true;
            }
            else if (regEscala.Título == "P")
            {
                titAtual.Text = "(Plantão)";
                titAtual.Tag = 3;
                janTítulo.Tag = 3;
                opçTitlo3.Checked = true;
            }
            else if (regEscala.Título == "Z")
            {
                titAtual.Text = "(Limpeza)";
                titAtual.Tag = 4;
                janTítulo.Tag = 4;
                opçTitlo4.Checked = true;
            }
            Cameira regCame = new Cameira(myDBase);
            regCame.Código = códCame;
            dbRet = regCame.Obter();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: ScalaBaseObterAfast" + "\n" + regCame.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            DateTime inícioAno = DateTime.Today.AddMonths (-5);
            inícioAno = Convert.ToDateTime(inícioAno.ToString("01/01/yyyy"));
            if (regCame.FérInício > inícioAno)
            {
                refData[0, 0] = regCame.FérInício;
                refData[0, 1] = regCame.FérFinal;
            }
            else
            {
                refData[0, 0] = inícioAno;
                refData[0, 1] = inícioAno;
            }
            if (regCame.LiçaInício > inícioAno)
            {
                refData[1, 0] = regCame.LiçaInício;
                refData[1, 1] = regCame.LiçaFinal;
            }
            else
            {
                refData[1, 0] = inícioAno;
                refData[1, 1] = inícioAno;
            }
            if (regCame.AttoInício > inícioAno)
            {
                refData[2, 0] = regCame.AttoInício;
                refData[2, 1] = regCame.AttoFinal;
            }
            else
            {
                refData[2, 0] = inícioAno;
                refData[2, 1] = inícioAno;
            }
            DateTime dataHoje = DateTime.Today;
            dataAltFim .Value = dataHoje;
            dataAltFim.Value = dataHoje;
            janBase.Enabled = true; 
            janAlter.Enabled = false;
            janAlter.Tag = 0;
            opçAlter1.Checked = false;
            opçAlter2.Checked = false;
            opçAlter3.Checked = false;
            cmdGravar.Visible = true;
            //cmdGravar.Enabled = false;
        }

        private void Pulso_Tick(object sender, EventArgs e)
        {
            Pulso.Enabled = false;
            infoOK.Visible = false;
            txNome.Text = "";
        }

        private void rot_Alterou(object sender, EventArgs e)
        {
        	/*if ((baseAlterada.Value != basePrevista.Value) || (BlocoPrev.Value != BlocoAlter.Value) ||
                (HoraPrev.Value != HoraAlter.Value) || (MinoPrev.Value != MinoAlter.Value) ||
                (OrdemPrev.Value != OrdemAlter.Value) || (Convert.ToInt32(titAtual.Tag) != Convert.ToInt32(janTítulo.Tag)) ||   
                (dataPrevIni.Value != dataAltIni.Value) || (dataPrevFim.Value != dataAltFim.Value))
                cmdGravar.Enabled = true;
            else cmdGravar.Enabled = false;*/
        }

        private void opçAlter_Click(object sender, EventArgs e)
        {
            opçTipo = Convert.ToInt32(((KryptonRadioButton)sender).Tag);
            janAlter.Text = ((KryptonRadioButton)sender).Text;
            dataPrevIni.Value = refData[opçTipo - 1, 0];
            dataPrevFim.Value = refData[opçTipo - 1, 1];
            if (refData[opçTipo - 1, 0] >= dataAltIni.MinDate) dataAltIni.Value = refData[opçTipo - 1, 0];
            else dataAltIni.Value = DateTime.Today;
            if (refData[opçTipo - 1, 1] >= dataAltIni.MinDate) dataAltFim.Value = refData[opçTipo - 1, 1];
            else dataAltFim.Value = DateTime.Today;
            janAlter.Enabled = true;
        }

        private void Datas_ValueChanged(object sender, EventArgs e)
        {
            janAlter.Tag = 1;
            rot_Alterou(null, null);
        }

        private void opçTitlo_Click(object sender, EventArgs e)
        {
            janTítulo.Tag = Convert.ToInt32(((KryptonRadioButton)sender).Tag);
            rot_Alterou(null, null);
        }

        private void cmdNoAlter_Click(object sender, EventArgs e)
        {
            DialogResult resp = MessageBox.Show("Este comando fará a desprogramação de "
                + janAlter.Text + "\n\nVocê confirma ?", "   Desconsiderar " + janAlter.Text,
                MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (resp == DialogResult.No) return;
            Cameira regCame = new Cameira(myDBase);
            regCame.Código = códCame;
            regCame.FérInício = Convert.ToDateTime("01/01/2001");
            regCame.FérFinal = regCame.FérInício;
            int dbRet = regCame.SetBase(opçTipo);
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: ScalaBaseNoAlter" + "\n" + regCame.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            refData[opçTipo - 1, 0] = regCame.FérInício;
            refData[opçTipo - 1, 1] = regCame.FérInício;
            opçAlter1.Checked = false;
            opçAlter2.Checked = false;
            opçAlter3.Checked = false;
            janAlter.Enabled = false;
            //cmdGravar.Visible = false;
            infoOK.Visible = true;
            Pulso.Enabled = true;
        }
    }
}
